package com.molichuxing.gateway.bff.goods.services;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.gateway.bff.basic.entity.response.VehicleMakeVo;
import com.molichuxing.gateway.bff.goods.entity.response.*;
import com.molichuxing.services.infrastructure.dto.response.GoodsIntroduceDto;
import com.molichuxing.services.property.GoodsTypeEnum;

import java.util.List;
import java.util.Map;

/**
 * 商品信息相关bff
 * 
 * @author yixuelin
 * @date 2019年8月13日
 *
 */
public interface GoodsBffService {

	/**
	 * 根据商品id判断商品是否禁售
	 * @param goodsId
	 * @param storeId
	 * @return
	 * @throws Exception
	 */
	public Boolean isProhibited(Integer goodsId, Integer storeId) throws Exception;

	/**
	 * 获取app的商品列表
	 * @param storeId
	 * @param pageNum
	 * @param pageSize
	 * @return
	 * @throws Exception
	 */
	public Paged<GoodsVo> getAppGoodsList(Integer storeId, Integer pageNum, Integer pageSize) throws Exception;


	/**
	 * 获取app的商品列表
	 * @param storeId
	 * @param pageNum
	 * @param pageSize
	 * @return
	 * @throws Exception
	 */
	public Paged<GoodsVo> getAppGoodsListNew(Integer storeId, Map<String, Object> selectParam ,Integer sortFlag, Integer pageNum, Integer pageSize) throws Exception;

	/**
	 * 获取商品的热销车型
	 * @return
	 * @throws Exception
	 */
	public List<GoodsVo> getSellWellGoodsList() throws Exception;


	/**
	 * 获取商品详情（专属、订阅）
	 * @param goodsId
	 * @param packageId
	 * @return
	 */
	public GoodsAppDetailVo getAppGoods(Integer goodsId, Integer packageId) throws Exception;

	/**
	 * 根据商品id、里程包id确认订单
	 * @param goodsId
	 * @param packageId
	 * @return
	 */
	public GoodsAppConfirmDetailVo getAppConfirmGoods(Integer goodsId, Integer packageId) throws Exception;

	/**
	 * 获取专属商品的抽屉信息
	 * @param goodsId
	 * @return
	 * @throws Exception
	 */
	public GoodsExclusiveDrawerVo getAppExclusiveGoods(Integer goodsId, Integer storeId) throws Exception;

	/**
	 * 获取订阅商品的抽屉信息
	 * @param goodsId
	 * @param packageId
	 * @return
	 * @throws Exception
	 */
	public GoodsSubscribeDrawerVo getAppSubscribeGoods(Integer goodsId, Integer packageId, Integer storeId) throws Exception;

	/**
	 * 获取订阅续订商品信息
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 * @throws Exception
	 */
	public GoodsRenewVo getGoodsRenew(Long orderCode) throws Exception;

	/**
	 * 获取订阅加购商品信息
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 * @throws Exception
	 */
	public GoodsPurchaseVo getGoodsPurchase(Long orderCode) throws Exception;

	/**
	 * 获取订阅续订商品确认订单页信息
	 * 
	 * @param userId
	 *            用户id
	 * @param orderCode
	 *            订单号
	 * @param goodsId
	 *            商品id
	 * @param packageId
	 *            里程包id
	 * @return
	 * @throws Exception
	 */
	public GoodsConfirmVo getGoodsRenewConfirm(Integer userId, Long orderCode, Integer goodsId, Integer packageId)
			throws Exception;

	/**
	 * 获取订阅加购商品确认订单页信息
	 * 
	 * @param userId
	 *            用户id
	 * @param orderCode
	 *            订单号
	 * @param goodsId
	 *            商品id
	 * @param packageId
	 *            里程包id
	 * @return
	 * @throws Exception
	 */
	public GoodsConfirmVo getGoodsPurchaseConfirm(Integer userId, Long orderCode, Integer goodsId, Integer packageId)
			throws Exception;

	/**
	 * 根据门店id获取品牌信息
	 * @param storeId
	 * @return
	 */
	public List<VehicleMakeVo> getBrandByStoreId(Integer storeId) throws Exception;

	/**
	 * 获取大屏商品信息列表
	 * @param storeId
	 * @param brandId
	 * @return
	 */
	public List<GoodsBigScreenVo> getBigScreenGoodsList(Integer storeId, Integer brandId) throws Exception ;

	/**
	 * 根据车型获取图片详情
	 * @param goodsType
	 * @return
	 */
	public List<GoodsIntroduceVo> getGoodsIntroduce(Integer goodsType);
}
